AbSolution is a tool for BCR/TCR Fab sequence
feature analysis. This report was generated for reproducibility
purposes.
For more details on using AbSolution see http://rmarkdown.rstudio.com. AbSolution follows the ENCORE
guidelines.
Author: Rodrigo García
Contact email: r.garciavaliente@amsterdamumc.nl
User comments: We will test AbSolution with a test dataset (https://alakazam.readthedocs.io/en/stable/topics/Example10x/).
library(AbSolution)
library(shiny)
library(dplyr)
library(plotly)Datasets and parameters:
sample_table_react <- local(if (is.null(NULL) && TRUE == F) {
return(NULL)
} else {
sample_info <- structure(list(Filename = "Example10x_alakazam", Sample = "PBMC",
Patient = "HealthyDonor", Group = "CD19+", Subgroup = "", Additional_info = "10xGenomics"),
class = "data.frame", row.names = c(NA, -1L))
if (all(c("Filename", "Sample", "Patient", "Group", "Subgroup") %in% colnames(sample_info))) {
return(sample_info)
} else {
error.table <- data.frame(Error = paste("Modify and reupload again. The following column(s) are missing:",
paste(c("Filename", "Sample", "Patient", "Group", "Subgroup")[which(!(c("Filename",
"Sample", "Patient", "Group", "Subgroup") %in% colnames(sample_info)))],
collapse = ", "), sep = " "))
return(error.table)
}
})
sample_table_react## Filename Sample Patient Group Subgroup Additional_info
## 1 Example10x_alakazam PBMC HealthyDonor CD19+ 10xGenomics
parameters_only_for_shinymeta <- local(if (shiny::isRunning()) {
return(NULL)
} else {
folder_values <- list()
folder_values$Featured <- "//home/rgarcia/Documentos/2.Feature_determination"
folder_values$AIRR_parsed <- "//home/rgarcia/Documentos/1.Files_parsed"
Big_mem_values <- list()
Big_mem_values$Run <- 3
Selection_values <- list()
Features_values <- list()
Exploration_values <- list()
Features_values <- list(Current = 0, Total = 0)
input <- list()
input$use_what <- "Repertoire"
input$use_productive_or_not <- "Productive"
input$my_regions <- "CDR3"
input$my_var_elements <- c("NT", "AA")
input$my_vars <- c("Length", "Composition", "NGly sites", "Hot/Cold motifs",
"Peptide features")
input$my_vartypes <- "Baseline"
input$use_sharedVDJ <- FALSE
input$VJ_included <- NULL
input$groups_selected <- NULL
input$group_A <- NULL
input$group_B <- NULL
input$group_C <- NULL
input$use_univlog <- FALSE
input$samples_selected <- "HealthyDonor__PBMC"
input$exclude_variables <- NULL
input$pval_type <- "Corrected by Bonferroni"
input$pval_cutoff <- 0.05
input$estimate_cutoff <- 2L
input$number_selected_vars <- "All"
input$VJ_deselected <- NULL
input$VDJ_normalized_per_size <- TRUE
input$Rmut_filter <- c(0L, 26L)
input$work_as_categories <- FALSE
input$VDJ_maximize_clones <- TRUE
input$VDJ_normalized_per_sample <- FALSE
input$my_clone_def <- "Clone_AA_CDR3_VCDR3J_100__simil"
input$clonal_group <- "Clone_AA_CDR3_VCDR3J_100__simil"
input$clonal_region_group <- "CDR3"
input$plot_color <- "Group"
input$plot_color_expl <- "Group"
input$Exploration_plot_type <- "PCA"
input$Exploration_plot_type_dim <- c("1", "2")
input$Selection_plot_type <- "PCA"
input$Selection_plot_type_dim <- c("1", "2")
input$plot_feature <- "NT_CDR3_length"
input$plot_color_feature <- NULL
input$show_reconstructed <- FALSE
input$hide_points <- TRUE
input$use_UMAP <- FALSE
input$clonal_level_groupf <- "AA"
input$identity_clonal_group <- 100L
input$clones <- NULL
input$filter_clonal_group <- 0L
input$dominance_threshold <- 0.5
input$seed <- 1234L
input$colorblind_mode <- FALSE
input$new_clonal_group <- "VCDR3J"
input$calculate_shared_clones <- FALSE
input$preinfolder_AIRR <- list(path = list("", "home", "rgarcia", "Documentos"),
root = "Computer")
input$C_region_included_airr <- TRUE
input$Dgene_reconstruct_airr <- TRUE
input$TCRBCR_input_file <- "BCR"
input$base_folder <- list(path = list("", "home", "rgarcia", "Documentos"), root = "Computer")
input$FWR1partial_airr <- FALSE
input$FWR4partial_airr <- FALSE
input$raw_sample_file <- NULL
input$include_data_report <- TRUE
Big_mem_color_values <- list()
sample_info_react <- list()
sample_info_react$table <- structure(list(Filename = "Example10x_alakazam", Sample = "PBMC",
Patient = "HealthyDonor", Group = "CD19+", Subgroup = "", Additional_info = "10xGenomics"),
class = "data.frame", row.names = c(NA, -1L))
sample_info_react$summary_status <- FALSE
sample_info_react$test_status <- TRUE
sample_info_react$step_3 <- TRUE
ID_selected_values <- list()
ID_selected_values$subclones <- NULL
ID_selected_values$clones <- NULL
ID_selected_values$intersection_samples <- NULL
if (TRUE) {
folder_values$Featured <- "../Data/Dataset/Processed/2.Feature_determination"
folder_values$AIRR_parsed <- "../Data/Dataset/Processed/1.Files_parsed"
input$base_folder <- "../Data/Dataset/Meta"
input$preinfolder_AIRR <- "../Data/Dataset/Raw"
}
return(list(input = input, folder_values = folder_values, Exploration_values = Exploration_values,
Selection_values = Selection_values, Big_mem_values = Big_mem_values, Big_mem_color_values = Big_mem_color_values,
ID_selected_values = ID_selected_values, sample_info_react = sample_info_react,
Features_values = Features_values))
})
parameters_only_for_shinymeta## $input
## $input$use_what
## [1] "Repertoire"
##
## $input$use_productive_or_not
## [1] "Productive"
##
## $input$my_regions
## [1] "CDR3"
##
## $input$my_var_elements
## [1] "NT" "AA"
##
## $input$my_vars
## [1] "Length" "Composition" "NGly sites" "Hot/Cold motifs"
## [5] "Peptide features"
##
## $input$my_vartypes
## [1] "Baseline"
##
## $input$use_sharedVDJ
## [1] FALSE
##
## $input$use_univlog
## [1] FALSE
##
## $input$samples_selected
## [1] "HealthyDonor__PBMC"
##
## $input$pval_type
## [1] "Corrected by Bonferroni"
##
## $input$pval_cutoff
## [1] 0.05
##
## $input$estimate_cutoff
## [1] 2
##
## $input$number_selected_vars
## [1] "All"
##
## $input$VDJ_normalized_per_size
## [1] TRUE
##
## $input$Rmut_filter
## [1] 0 26
##
## $input$work_as_categories
## [1] FALSE
##
## $input$VDJ_maximize_clones
## [1] TRUE
##
## $input$VDJ_normalized_per_sample
## [1] FALSE
##
## $input$my_clone_def
## [1] "Clone_AA_CDR3_VCDR3J_100__simil"
##
## $input$clonal_group
## [1] "Clone_AA_CDR3_VCDR3J_100__simil"
##
## $input$clonal_region_group
## [1] "CDR3"
##
## $input$plot_color
## [1] "Group"
##
## $input$plot_color_expl
## [1] "Group"
##
## $input$Exploration_plot_type
## [1] "PCA"
##
## $input$Exploration_plot_type_dim
## [1] "1" "2"
##
## $input$Selection_plot_type
## [1] "PCA"
##
## $input$Selection_plot_type_dim
## [1] "1" "2"
##
## $input$plot_feature
## [1] "NT_CDR3_length"
##
## $input$show_reconstructed
## [1] FALSE
##
## $input$hide_points
## [1] TRUE
##
## $input$use_UMAP
## [1] FALSE
##
## $input$clonal_level_groupf
## [1] "AA"
##
## $input$identity_clonal_group
## [1] 100
##
## $input$filter_clonal_group
## [1] 0
##
## $input$dominance_threshold
## [1] 0.5
##
## $input$seed
## [1] 1234
##
## $input$colorblind_mode
## [1] FALSE
##
## $input$new_clonal_group
## [1] "VCDR3J"
##
## $input$calculate_shared_clones
## [1] FALSE
##
## $input$preinfolder_AIRR
## [1] "../Data/Dataset/Raw"
##
## $input$C_region_included_airr
## [1] TRUE
##
## $input$Dgene_reconstruct_airr
## [1] TRUE
##
## $input$TCRBCR_input_file
## [1] "BCR"
##
## $input$base_folder
## [1] "../Data/Dataset/Meta"
##
## $input$FWR1partial_airr
## [1] FALSE
##
## $input$FWR4partial_airr
## [1] FALSE
##
## $input$include_data_report
## [1] TRUE
##
##
## $folder_values
## $folder_values$Featured
## [1] "../Data/Dataset/Processed/2.Feature_determination"
##
## $folder_values$AIRR_parsed
## [1] "../Data/Dataset/Processed/1.Files_parsed"
##
##
## $Exploration_values
## list()
##
## $Selection_values
## list()
##
## $Big_mem_values
## $Big_mem_values$Run
## [1] 3
##
##
## $Big_mem_color_values
## list()
##
## $ID_selected_values
## list()
##
## $sample_info_react
## $sample_info_react$table
## Filename Sample Patient Group Subgroup Additional_info
## 1 Example10x_alakazam PBMC HealthyDonor CD19+ 10xGenomics
##
## $sample_info_react$summary_status
## [1] FALSE
##
## $sample_info_react$test_status
## [1] TRUE
##
## $sample_info_react$step_3
## [1] TRUE
##
##
## $Features_values
## $Features_values$Current
## [1] 0
##
## $Features_values$Total
## [1] 0
input <- parameters_only_for_shinymeta$input
folder_values <- parameters_only_for_shinymeta$folder_values
Exploration_values <- parameters_only_for_shinymeta$Exploration_values
Selection_values <- parameters_only_for_shinymeta$Selection_values
Big_mem_values <- parameters_only_for_shinymeta$Big_mem_values
Big_mem_color_values <- parameters_only_for_shinymeta$Big_mem_color_values
ID_selected_values <- parameters_only_for_shinymeta$ID_selected_values
sample_info_react <- parameters_only_for_shinymeta$sample_info_react
Features_values <- parameters_only_for_shinymeta$Features_valuesUser comments: The nucleotide sequences in this BCR dataset include
part of the sequence before the FWR1, so we remove those.
We
calculate approximately about 12k features per sequence.
if (shiny::isRunning()) {
shinyjs::hide("Preprocess_AIRR", anim = TRUE)
session$sendCustomMessage(type = "testmessage", message = "Preprocessing")
}
if (shiny::isRunning()) {
folder_values$AIRR_parsed <- file.path(shinyFiles::parseDirPath(volumes, input$base_folder),
"1.Files_parsed")
} else {
volumes <- shinyFiles::getVolumes()
}
unlink(folder_values$AIRR_parsed, recursive = TRUE)
dir.create(folder_values$AIRR_parsed)
if (shiny::isRunning() || !(input$include_data_report)) {
write.table(sample_info_react$table, file.path(shinyFiles::parseDirPath(volumes,
input$base_folder), "Sample_summary.txt"), append = F, row.names = F, col.names = T,
sep = "\t", quote = F)
} else {
write.table(sample_info_react$table, file.path(input$base_folder, "Sample_summary.txt"),
append = F, row.names = F, col.names = T, sep = "\t", quote = F)
}
if (shiny::isRunning()) {
shinyjs::show("pb_AIRR_vis", anim = TRUE)
}
if (shiny::isRunning()) {
inf_table <- sample_table_react()
} else {
inf_table <- sample_info_react$table
}
print("inf_table")
print(inf_table)
for (row_number_sample_table in c(1:nrow(inf_table))) {
print(row_number_sample_table)
AbSolution:::parse_AIRRSeq_file(file = inf_table$Filename[row_number_sample_table],
group = inf_table$Group[row_number_sample_table], patient = inf_table$Patient[row_number_sample_table],
subgroup = inf_table$Subgroup[row_number_sample_table], sample = inf_table$Sample[row_number_sample_table],
input_path = if (shiny::isRunning() || !(input$include_data_report)) {
paste(shinyFiles::parseDirPath(volumes(), input$preinfolder_AIRR), "/",
sep = "")
} else {
paste(input$preinfolder_AIRR, "/", sep = "")
}, C_region_included = input$C_region_included_airr, FWR1partial = input$FWR1partial_airr,
FWR4partial = input$FWR4partial_airr, output_path = paste(folder_values$AIRR_parsed,
"/", sep = ""), D_gene = input$Dgene_reconstruct_airr, repertoire = input$TCRBCR_input_file)
if (shiny::isRunning()) {
shinyWidgets::updateProgressBar(session = session, id = "pb_AIRR", value = 100 *
(row_number_sample_table/nrow(inf_table)), total = 100, title = paste("Process",
trunc(100 * (row_number_sample_table/nrow(inf_table))/10)))
Sys.sleep(0.1)
}
}
print("Step done")
if (shiny::isRunning()) {
shinyjs::hide("pb_AIRR_vis", anim = TRUE)
can_show_button_to_step$step_2_AIRR <- TRUE
}if (shiny::isRunning()) {
hide("Feature_determination")
session$sendCustomMessage(type = "testmessage", message = "Calculating features, be patient!")
}
if (shiny::isRunning()) {
folder_values$Featured <- file.path(shinyFiles::parseDirPath(volumes(), input$base_folder),
"2.Feature_determination")
}
unlink(folder_values$Featured, recursive = TRUE)
dir.create(folder_values$Featured)
if (shiny::isRunning()) {
shinyjs::show("pb_Feature_vis")
}
Features_values$Total <- AbSolution:::Feature_1(if (shiny::isRunning()) {
shinyFiles::parseDirPath(volumes, input$base_folder)
} else {
dirname(folder_values$Featured)
}, grouping_by = c("Patient", "Group"))
print(Features_values$Total)
List_dfs <- split(data.table::as.data.table(data.table::fread(if (shiny::isRunning()) {
file.path(paste(shinyFiles::parseDirPath(volumes, input$base_folder), "/2.Feature_determination",
sep = ""), "IMGT_parsed_index_extended.txt")
} else {
file.path(folder_values$Featured, "IMGT_parsed_index_extended.txt")
}, header = T, sep = "\t", quote = FALSE)), by = c("Patient", "Group"))
print("Feature calculation")
for (i in c(1:length(List_dfs))) {
print(paste(i, length(List_dfs), sep = " / "))
Features_values$Current <- Features_values$Current + 1
AbSolution:::Feature__dataset(path_base = if (shiny::isRunning()) {
shinyFiles::parseDirPath(volumes, input$base_folder)
} else {
dirname(folder_values$Featured)
}, DF_to_parse = List_dfs[[i]], name_DF_to_parse = names(List_dfs)[i], FWR1partial = input$FWR1partial_airr,
FWR4partial = input$FWR4partial_airr)
}
rm(List_dfs)
if (shiny::isRunning()) {
hide("pb_Feature_vis")
can_show_button_to_step$step_3 <- TRUE
}if (shiny::isRunning()) {
print("Merging")
}
info <- AbSolution:::merge_FBMs(folder_values$Featured)
if (shiny::isRunning()) {
print("Merged")
}
Big_mem_values$Header <- info[[1]]
Big_mem_values$Short_DF <- info[[2]]
Big_mem_values$Short_DF$Patient_Sample <- paste(Big_mem_values$Short_DF$Patient,
Big_mem_values$Short_DF$Sample, sep = "__")
Big_mem_values$Short_DF$Text_ID <- paste(Big_mem_values$Short_DF$ID, Big_mem_values$Short_DF$Sequence_type,
sep = "_&_")
Big_mem_values$Big_DF <- info[[3]]
if (shiny::isRunning()) {
updateSliderInput(inputId = "Rmut_filter", min = min(Big_mem_values$Big_DF[,
which(Big_mem_values$Header == "AA_Whole_Replacement_muts_counts")]), max = max(Big_mem_values$Big_DF[,
which(Big_mem_values$Header == "AA_Whole_Replacement_muts_counts")]))
}
Big_mem_values$Patient_Sample <- unique(Big_mem_values$Short_DF$Patient_Sample)
Big_mem_values$VJs <- sort(unique(Big_mem_values$Short_DF$V_and_J))
counts_VJs <- table(Big_mem_values$VJs)/2
names(Big_mem_values$VJs) <- sapply(Big_mem_values$VJs, function(z) paste(z, counts_VJs[which(names(counts_VJs) ==
z)], sep = " - Counts:"))
rm(info)
if (any(grepl(",", Big_mem_values$Short_DF$Best_V, fixed = T))) {
Big_mem_values$Short_DF <- Big_mem_values$Short_DF %>%
mutate(Best_V = gsub(",.*", "", Best_V)) %>%
mutate(Best_J = gsub(",.*", "", Best_J)) %>%
mutate(Best_D = gsub(",.*", "", Best_D)) %>%
mutate(V_and_J = paste0(Best_V, "_", Best_J)) %>%
mutate(V_and_D_and_J = paste0(Best_V, "_", Best_D, "_", Best_J))
}
Big_mem_color_values$list_values <- list()
Big_mem_color_values$list_values[["V"]] <- list()
Big_mem_color_values$list_values[["D"]] <- list()
Big_mem_color_values$list_values[["J"]] <- list()
for (gene in unique(Big_mem_values$Short_DF$Best_V)) {
Big_mem_color_values$list_values[["V"]][[strsplit(strsplit(strsplit(gene, split = "*",
fixed = T)[[1]][1], split = "/")[[1]][1], split = "-")[[1]][1]]] <- sort(unique(c(Big_mem_color_values$list_values[["V"]][[strsplit(strsplit(strsplit(gene,
split = "*", fixed = T)[[1]][1], split = "/")[[1]][1], split = "-")[[1]][1]]],
gene)))
}
for (gene in sort(unique(Big_mem_values$Short_DF$Best_J))) {
Big_mem_color_values$list_values[["J"]][[strsplit(strsplit(strsplit(gene, split = "*",
fixed = T)[[1]][1], split = "/")[[1]][1], split = "-")[[1]][1]]] <- sort(unique(c(Big_mem_color_values$list_values[["J"]][[strsplit(strsplit(strsplit(gene,
split = "*", fixed = T)[[1]][1], split = "/")[[1]][1], split = "-")[[1]][1]]],
gene)))
}
if ("Best_D" %in% colnames(Big_mem_values$Short_DF)) {
for (gene in sort(unique(Big_mem_values$Short_DF$Best_D))) {
Big_mem_color_values$list_values[["D"]][[strsplit(strsplit(strsplit(gene,
split = "*", fixed = T)[[1]][1], split = "/")[[1]][1], split = "-")[[1]][1]]] <- sort(unique(c(Big_mem_color_values$list_values[["D"]][[strsplit(strsplit(strsplit(gene,
split = "*", fixed = T)[[1]][1], split = "/")[[1]][1], split = "-")[[1]][1]]],
gene)))
}
}
Big_mem_color_values$start_calculating <- T
tmp_rows_cols <- AbSolution:::filter_merged(FBM = Big_mem_values$Big_DF, merged_df = Big_mem_values$Short_DF,
merged_header = Big_mem_values$Header, use_rgermline = "Reconstructed germline" %in%
input$use_what, use_repertoire = "Repertoire" %in% input$use_what, use_productive = "Productive" %in%
input$use_productive_or_not, use_nonproductive = "Non-productive" %in% input$use_productive_or_not,
my_regions = input$my_regions, my_var_elements = input$my_var_elements, my_vars = input$my_vars,
my_vartypes = input$my_vartypes, use_sharedVDJ = input$use_sharedVDJ, V_J_to_use = input$VJ_included,
groups = input$groups_selected, group_A = input$group_A, group_B = input$group_B,
group_C = input$group_C, univlog = input$use_univlog, samples_to_keep = input$samples_selected,
variables_to_remove = input$exclude_variables, pval_type = input$pval_type, pval_cutoff = input$pval_cutoff,
estimate_cutoff = input$estimate_cutoff, number_selected_vars = input$number_selected_vars,
VJ_deselected = input$VJ_deselected, VDJ_normalized_per_size = input$VDJ_normalized_per_size,
R_mut_threshold_min = input$Rmut_filter[1], R_mut_threshold_max = input$Rmut_filter[2],
to_compare_groups = input$work_as_categories, VDJ_maximize_clones = input$VDJ_maximize_clones,
VDJ_normalized_per_sample = input$VDJ_normalized_per_sample, my_clone_def = input$my_clone_def,
seed = input$seed, chains = input$chains_selected, igsubtypes = input$subtype_selected)## [1] "Original sizes: "
## [1] 382
## [1] 12600
## [1] "HealthyDonor__PBMC"
## [1] "Filtering samples"
## [1] 382
## [1] 382
## [1] "Big_summary for"
## [1] 292
## [1] 286
## [1] "Filter passed by: "
## [1] 191
## [1] 286
Exploration_values$rows <- tmp_rows_cols$ROWS
Exploration_values$columns <- tmp_rows_cols$COLUMNS
Selection_values$rows <- tmp_rows_cols$ROWS
Selection_values$columns <- tmp_rows_cols$COLUMNS
rm(tmp_rows_cols)
if (Big_mem_color_values$start_calculating) {
suppressWarnings({
Big_mem_color_values$V <- AbSolution:::Ab_palette(Big_mem_color_values$list_values[["V"]],
vect_genes_comb = NA, type_values = c("V"), seed = input$seed, colorblind = input$colorblind_mode)
Big_mem_color_values$J <- AbSolution:::Ab_palette(Big_mem_color_values$list_values[["J"]],
vect_genes_comb = NA, type_values = c("J"), seed = input$seed, colorblind = input$colorblind_mode)
Big_mem_color_values$VJ <- AbSolution:::Ab_palette(Big_mem_color_values$list_values[c("V",
"J")], vect_genes_comb = sort(unique(Big_mem_values$Short_DF$V_and_J)),
type_values = c("VJ"), seed = input$seed, colorblind = input$colorblind_mode)
if ("Best_D" %in% colnames(Big_mem_values$Short_DF)) {
Big_mem_color_values$D <- AbSolution:::Ab_palette(Big_mem_color_values$list_values[["D"]],
vect_genes_comb = NA, type_values = c("D"), seed = input$seed, colorblind = input$colorblind_mode)
Big_mem_color_values$VDJ <- AbSolution:::Ab_palette(Big_mem_color_values$list_values[c("V",
"D", "J")], vect_genes_comb = sort(unique(Big_mem_values$Short_DF$V_and_D_and_J)),
type_values = c("VDJ"), seed = input$seed, colorblind = input$colorblind_mode)
}
})
}User comments:
if (!is.null(Selection_values$rows) && length(Selection_values$rows) > 0 && !is.null(Selection_values$columns) &&
length(Selection_values$columns) > 0) {
if (!(paste("Clone", input$clonal_level_group, input$clonal_region_group, input$new_clonal_group,
input$identity_clonal_group, "simil", sep = "_") %in% colnames(Big_mem_values$Short_DF))) {
Big_mem_values$Short_DF <- AbSolution:::calculate_clone(seq_df = Big_mem_values$Short_DF,
clonotype = input$new_clonal_group, AA_or_NT = input$clonal_level_group,
region = input$clonal_region_group, percentage = input$identity_clonal_group,
calculate_shared_clones = input$calculate_shared_clones)
}
}## [1] "Clone_AA_CDR3_VCDR3J_100__simil"
if (!is.null(Selection_values$rows) && length(Selection_values$rows) > 0 && !is.null(Selection_values$columns) &&
length(Selection_values$columns) > 0 && !is.null(input$clonal_group) && input$clonal_group !=
"") {
fig_violin <- AbSolution:::draw_violinplots(seq_df = Big_mem_values$Short_DF,
group = "Patient_Sample", selected_rows = Selection_values$rows, clonotype = input$clonal_group,
AA_or_NT = input$clonal_level_group, region = input$clonal_region_group,
percentage = input$identity_clonal_group, freq_filter = input$filter_clonal_group,
Selected_clones = ID_selected_values$clones, dominance_threshold = input$dominance_threshold)
ID_selected_values$clones <- NULL
print(ID_selected_values$clones$key)
fig_violin
}## NULL
if (!is.null(Selection_values$rows) && length(Selection_values$rows) > 0 && !is.null(Selection_values$columns) &&
length(Selection_values$columns) > 0 && !is.null(input$clonal_group) && input$clonal_group !=
"") {
fig_upset <- AbSolution:::draw_upsetplot(seq_df = Big_mem_values$Short_DF, group = "Patient_Sample",
selected_rows = Selection_values$rows, clonotype = input$clonal_group, AA_or_NT = input$clonal_level_group,
region = input$clonal_region_group, percentage = input$identity_clonal_group,
freq_filter = input$filter_clonal_group, Selected_clones = ID_selected_values$clones)
fig_upset %>%
upsetjs::interactiveChart("click", events_nonce = TRUE) %>%
upsetjs::generateDistinctIntersections()
}if (!is.null(ID_selected_values$intersection_samples$setNames) && !is.null(ID_selected_values$intersection_samples$elems) &&
!is.null(Selection_values$rows) && length(Selection_values$rows) > 0 && !is.null(Selection_values$columns) &&
length(Selection_values$columns) > 0 && !is.null(input$clonal_group) && input$clonal_group !=
"") {
if (length(unlist(ID_selected_values$intersection_samples$setNames)) > 1) {
fig_sharedclones <- AbSolution:::draw_sharedclonesplot(seq_df = Big_mem_values$Short_DF,
sets = ID_selected_values$intersection_samples$setNames, group = "Patient_Sample",
selected_rows = Selection_values$rows, clonotype = input$clonal_group,
AA_or_NT = input$clonal_level_group, region = input$clonal_region_group,
percentage = input$identity_clonal_group, freq_filter = input$filter_clonal_group,
Selected_clones = ID_selected_values$clones, dominance_threshold = input$dominance_threshold)
ID_selected_values$clones <- event_data("plotly_selected")
fig_sharedclones %>%
toWebGL()
}
}User comments:
if (!is.null(Exploration_values$rows) && length(Exploration_values$rows) > 0 && !is.null(Exploration_values$columns) &&
length(Exploration_values$columns) > 0) {
if (is.null(input$plot_color_expl)) {
selection <- "Group"
} else {
selection <- input$plot_color_expl
}
tmp_PCAex <- AbSolution:::big_PCA(FBM = Big_mem_values$Big_DF, rows = Exploration_values$rows,
columns = Exploration_values$columns)
tmp_PCAex[[1]] <- as.data.frame(tmp_PCAex[[1]])
colnames(tmp_PCAex[[1]]) <- paste("Dim_", c(1:5), sep = "")
tmp_PCAex[[1]]$Color <- as.factor(unlist(Big_mem_values$Short_DF[Exploration_values$rows,
..selection]))
tmp_PCAex[[1]]$Text_ID <- Big_mem_values$Short_DF[Exploration_values$rows, get("Text_ID")]
tmp_PCAex[[1]]$Seq_type <- factor(unlist(Big_mem_values$Short_DF[Exploration_values$rows,
get("Sequence_type")]), levels = c("Reconstructed_germline", "Repertoire"))
Exploration_values$Scores <- tmp_PCAex[[1]]
Exploration_values$Variance_explained <- tmp_PCAex[[2]]
if (input$use_UMAP && as.numeric(unname(strsplit(as.character(print(benchmarkme::get_ram(),
unit_system = "iec")), split = " ")[[1]][1])) > round(length(Exploration_values$rows) *
length(Exploration_values$columns) * 8/2^{
20
}/1024, 2)) {
print("UMAPEx")
tmp_umap <- as.data.frame(umap(Big_mem_values$Big_DF[Exploration_values$rows,
Exploration_values$columns])$layout)
print(dim(tmp_umap))
colnames(tmp_umap) <- paste("Dim_", c(1:2), sep = "")
tmp_umap$Color <- as.factor(unlist(Big_mem_values$Short_DF[Exploration_values$rows,
..selection]))
tmp_umap$Text_ID <- paste(unlist(Big_mem_values$Short_DF[Exploration_values$rows,
get("ID")]), unlist(Big_mem_values$Short_DF[Exploration_values$rows,
get("Sequence_type")]), sep = "_&_")
tmp_umap$Seq_type <- factor(unlist(Big_mem_values$Short_DF[Exploration_values$rows,
get("Sequence_type")]), levels = c("Reconstructed_germline", "Repertoire"))
Exploration_values$UMAP <- tmp_umap
if (shiny::isRunning()) {
updateSelectInput(session, "Exploration_plot_type", choices = c(PCA = "PCA",
UMAP = "UMAP"), selected = "PCA")
}
print("DONEUMAPEx")
rm(tmp_umap)
} else {
if (shiny::isRunning()) {
updateSelectInput(session, "Exploration_plot_type", choices = c(PCA = "PCA"),
selected = "PCA")
}
}
rm(tmp_PCAex)
Big_mem_values$Run <- Big_mem_values$Run + 1
}
if (!is.null(Selection_values$rows) && length(Selection_values$rows) > 0 && !is.null(Selection_values$columns) &&
length(Selection_values$columns) > 0) {
if (is.null(input$plot_color)) {
selection <- "Group"
} else {
selection <- "Group"
}
tmp_PCA <- AbSolution:::big_PCA(FBM = Big_mem_values$Big_DF, rows = Selection_values$rows,
columns = Selection_values$columns)
tmp_PCA[[1]] <- as.data.frame(tmp_PCA[[1]])
colnames(tmp_PCA[[1]]) <- paste("Dim_", c(1:5), sep = "")
tmp_PCA[[1]]$Color <- as.factor(unlist(Big_mem_values$Short_DF[Selection_values$rows,
..selection]))
tmp_PCA[[1]]$Text_ID <- Big_mem_values$Short_DF[Selection_values$rows, get("Text_ID")]
tmp_PCA[[1]]$Seq_type <- factor(unlist(Big_mem_values$Short_DF[Selection_values$rows,
get("Sequence_type")]), levels = c("Reconstructed_germline", "Repertoire"))
Selection_values$Scores <- tmp_PCA[[1]]
Selection_values$Variance_explained <- tmp_PCA[[2]]
Big_mem_values$Run <- Big_mem_values$Run + 1
if (input$use_UMAP == T && as.numeric(unname(strsplit(as.character(print(benchmarkme::get_ram(),
unit_system = "iec")), split = " ")[[1]][1])) > round(length(Selection_values$rows) *
length(Selection_values$columns) * 8/2^{
20
}/1024, 2)) {
print("UMAP")
tmp_umap <- as.data.frame(umap(Big_mem_values$Big_DF[Selection_values$rows,
Selection_values$columns])$layout)
print(dim(tmp_umap))
colnames(tmp_umap) <- paste("Dim_", c(1:2), sep = "")
tmp_umap$Color <- as.factor(unlist(Big_mem_values$Short_DF[Selection_values$rows,
..selection]))
tmp_umap$Text_ID <- paste(unlist(Big_mem_values$Short_DF[Selection_values$rows,
get("ID")]), unlist(Big_mem_values$Short_DF[Selection_values$rows, get("Sequence_type")]),
sep = "_&_")
tmp_umap$Seq_type <- factor(unlist(Big_mem_values$Short_DF[Selection_values$rows,
get("Sequence_type")]), levels = c("Reconstructed_germline", "Repertoire"))
dim(tmp_umap)
Selection_values$UMAP <- tmp_umap
if (shiny::isRunning()) {
updateSelectInput(session, "Selection_plot_type", choices = c(PCA = "PCA",
UMAP = "UMAP"), selected = "PCA")
}
print("DONEUMAP")
} else {
if (shiny::isRunning()) {
updateSelectInput(session, "Selection_plot_type", choices = c(PCA = "PCA"))
}
}
}
if (!is.null(input$plot_color_expl) && !is.null(input$plot_color)) {
tmp_sp <- (unlist(Big_mem_values$Short_DF[Exploration_values$rows, get(input$plot_color_expl)]))
if (input$plot_color_expl %in% c("Best_V", "Best_J")) {
print(tmp_sp[1:10])
} else if (input$plot_color_expl == "V_and_J") {
}
tmp_sp[which(is.na(tmp_sp))] <- "NotAvailable"
tmp_sp[which((tmp_sp) == " ")] <- "NotAvailable"
tmp_sp[which((tmp_sp) == " ")] <- "NotAvailable"
tmp_sp[which((tmp_sp) == "")] <- "NotAvailable"
tmp_sp[which((tmp_sp) == "NotAvailable")] <- "NotAvailable"
tmp_sp <- unname(tmp_sp)
Exploration_values$Scores$Color <- tmp_sp
if (as.numeric(unname(strsplit(as.character(print(benchmarkme::get_ram(), unit_system = "iec")),
split = " ")[[1]][1])) > round(length(Exploration_values$rows) * length(Exploration_values$columns) *
8/2^{
20
}/1024, 2)) {
Exploration_values$UMAP$Color <- tmp_sp
}
old_sp <- NULL
all_sp <- NULL
if (!is.null(ID_selected_values$subclones)) {
old_sp <- tmp_sp
tmp_sp[Exploration_values$Scores$Text_ID %in% ID_selected_values$subclones$key] <- "User selected"
counterpart_start <- paste(sapply(ID_selected_values$subclones$key, function(z) strsplit(z,
split = "_&_")[[1]][1]), "_&_", sep = "")
tmp_txt_id <- paste(sapply(Exploration_values$Scores$Text_ID, function(z) strsplit(z,
split = "_&_")[[1]][1]), "_&_", sep = "")
tmp_sp[intersect(which(tmp_txt_id %in% counterpart_start), which(tmp_sp !=
"User selected"))] <- "Counterpart"
}
tmp_sp <- unname(tmp_sp)
Exploration_values$Scores$Selected <- tmp_sp
if (as.numeric(unname(strsplit(as.character(print(benchmarkme::get_ram(), unit_system = "iec")),
split = " ")[[1]][1])) > round(length(Exploration_values$rows) * length(Exploration_values$columns) *
8/2^{
20
}/1024, 2)) {
Exploration_values$UMAP$Selected <- tmp_sp
}
if (shiny::isRunning()) {
print(all(Exploration_values$Scores$Color == Exploration_values$Scores$Selected))
print(ID_selected_values$subclones$key)
print(Exploration_values$Scores$Text_ID[which(Exploration_values$Scores$Text_ID %in%
ID_selected_values$subclones$key)])
print(old_sp[which(Exploration_values$Scores$Text_ID %in% ID_selected_values$subclones$key)])
print(tmp_sp[which(Exploration_values$Scores$Text_ID %in% ID_selected_values$subclones$key)])
}
tmp_sp <- (unlist(Big_mem_values$Short_DF[Selection_values$rows, get(input$plot_color)]))
tmp_sp[which(is.na(tmp_sp))] <- "Not specified"
tmp_sp[which((tmp_sp) == " ")] <- "Not specified"
tmp_sp[which((tmp_sp) == " ")] <- "Not specified"
tmp_sp[which((tmp_sp) == "")] <- "Not specified"
tmp_sp[which((tmp_sp) == "NotAvailable")] <- "Not specified"
Selection_values$Scores$Color <- tmp_sp
if (as.numeric(unname(strsplit(as.character(print(benchmarkme::get_ram(), unit_system = "iec")),
split = " ")[[1]][1])) > round(length(Selection_values$rows) * length(Selection_values$columns) *
8/2^{
20
}/1024, 2)) {
Selection_values$UMAP$Color <- tmp_sp
}
if (!is.null(ID_selected_values$subclones)) {
tmp_sp[Selection_values$Scores$Text_ID %in% ID_selected_values$subclones$key] <- "User selected"
all_sp <- rep("Non-selected", nrow(Big_mem_values$Short_DF))
all_sp[Big_mem_values$Short_DF$Text_ID %in% ID_selected_values$subclones$key] <- "User selected"
counterpart_start <- paste(sapply(ID_selected_values$subclones$key, function(z) strsplit(z,
split = "_&_")[[1]][1]), "_&_", sep = "")
tmp_txt_id <- paste(sapply(Selection_values$Scores$Text_ID, function(z) strsplit(z,
split = "_&_")[[1]][1]), "_&_", sep = "")
tmp_sp[intersect(which(tmp_txt_id %in% counterpart_start), which(tmp_sp !=
"User selected"))] <- "Counterpart"
}
all_sp <- unname(all_sp)
Big_mem_values$Short_DF$Selected <- all_sp
if (!is.null(ID_selected_values$clones)) {
print("Wow clones working")
if (input$clonal_group == "Clone_ID") {
clonepart_start <- (Big_mem_values$Short_DF)[intersect(Selection_values$rows,
which((Big_mem_values$Short_DF)[, get("Clone_ID")] %in% ID_selected_values$clones$key)),
get("ID")]
} else {
clonepart_start <- (Big_mem_values$Short_DF)[intersect(Selection_values$rows,
which((Big_mem_values$Short_DF)[, get(paste("Clone", input$clonal_level_group,
input$clonal_region_group, input$clonal_group, input$identity_clonal_group,
"simil", sep = "_"))] %in% ID_selected_values$clones$key)), get("ID")]
}
tmp_txt_id <- sapply(Selection_values$Scores$Text_ID, function(z) strsplit(z,
split = "_&_")[[1]][1])
tmp_sp[which(tmp_txt_id %in% clonepart_start)] <- "Clones"
}
Selection_values$Scores$Selected <- tmp_sp
if (as.numeric(unname(strsplit(as.character(print(benchmarkme::get_ram(), unit_system = "iec")),
split = " ")[[1]][1])) > round(length(Selection_values$rows) * length(Selection_values$columns) *
8/2^{
20
}/1024, 2)) {
Selection_values$UMAP$Selected <- tmp_sp
}
}## 15.5 GiB
## 15.5 GiB
## 15.5 GiB
## 15.5 GiB
if (!is.null(Selection_values$rows) && length(Selection_values$rows) > 0 && !is.null(Selection_values$columns) &&
length(Selection_values$columns) > 0) {
if (input$plot_color == "Best_V") {
Sel_colors <- Big_mem_color_values$V
} else if (input$plot_color == "Best_J") {
Sel_colors <- Big_mem_color_values$J
} else if (input$plot_color == "Best_D") {
Sel_colors <- Big_mem_color_values$D
} else if (input$plot_color == "V_and_D_and_J") {
Sel_colors <- Big_mem_color_values$VDJ
} else if (input$plot_color == "V_and_J") {
Sel_colors <- Big_mem_color_values$VJ
} else {
Sel_colors <- AbSolution:::Ab_palette(list_values = unique(Selection_values$Scores$Color),
vect_genes_comb = NA, type_values = "cualitative", colorblind = input$colorblind_mode,
seed = input$seed)
names(Sel_colors) <- sort(unique(Selection_values$Scores$Color))
}
Sel_colors_BORDER <- c(Sel_colors, "#050609", "#ff4d6d", "#FFAD05")
names(Sel_colors_BORDER) <- c(names(Sel_colors), "User selected", "Counterpart",
"Clones")
Sel_colors_BORDER_width <- c(rep(1, length(Sel_colors)), 4, 4, 4)
names(Sel_colors_BORDER_width) <- c(names(Sel_colors), "User selected", "Counterpart",
"Clones")
Sel_colors_BORDER_symbol <- c("circle", "star-diamond")
names(Sel_colors_BORDER_symbol) <- c("Repertoire", "Reconstructed_germline")
if (input$Selection_plot_type == "PCA") {
test <- Selection_values$Scores
} else if (input$Selection_plot_type == "UMAP") {
test <- Selection_values$UMAP
}
test$Colors <- Sel_colors[match(test$Color, names(Sel_colors))]
test$Color_border <- Sel_colors_BORDER[match(test$Selected, names(Sel_colors_BORDER))]
test$Width_border <- Sel_colors_BORDER_width[match(test$Selected, names(Sel_colors_BORDER_width))]
test$Symbol <- Sel_colors_BORDER_symbol[match(test$Seq_type, names(Sel_colors_BORDER_symbol))]
if (length(input$Selection_plot_type_dim) < 2) {
dim1 <- 1
dim2 <- 2
} else {
dim1 <- as.numeric(input$Selection_plot_type_dim[1])
dim2 <- as.numeric(input$Selection_plot_type_dim[2])
}
tmpDim_1 <- test[, which(colnames(test) == paste0("Dim_", dim1))]
tmpDim_2 <- test[, which(colnames(test) == paste0("Dim_", dim2))]
test$Dim_1 <- tmpDim_1
test$Dim_2 <- tmpDim_2
fig <- plot_ly(data = test, type = "scatter", mode = "markers", colors = Sel_colors) %>%
config(toImageButtonOptions = list(format = "svg", filename = paste("PCA_Selection_plot",
Sys.time(), sep = "_"), width = 1400, height = 1000, scale = 4))
test <- test[(order(test$Color)), ]
tmp_test_ns <- test[intersect(intersect(which(test$Selected != "Clones"), which(test$Selected !=
"User selected")), which(test$Selected != "Counterpart")), ]
fig <- fig %>%
add_trace(data = tmp_test_ns, x = ~Dim_1, y = ~Dim_2, opacity = 0.7, text = ~Text_ID,
key = ~Text_ID, color = ~Color, colors = Sel_colors, type = "scatter",
mode = "markers", fill = ~"", hovertemplate = paste("<b>%{text}</b>"),
marker = list(sizemode = "diameter"), name = tmp_test_ns$Color, legendgroup = tmp_test_ns$Color)
tmp_test <- test[which(test$Selected == "Counterpart"), ]
if (nrow(tmp_test) > 0) {
fig <- fig %>%
add_trace(data = tmp_test, x = ~Dim_1, y = ~Dim_2, opacity = 0.7, text = ~Text_ID,
key = ~Text_ID, color = ~Color, colors = Sel_colors, symbol = ~Symbol,
type = "scatter", mode = "markers", fill = ~"", hovertemplate = paste("<b>%{text}</b>"),
marker = list(line = list(color = "#ff4d6d", width = tmp_test$Width_border[1])),
name = tmp_test$Color, showlegend = FALSE, legendgroup = tmp_test$Color)
}
tmp_test <- test[which(test$Selected == "Clones"), ]
if (nrow(tmp_test) > 0) {
not_in_leg <- which(unique(tmp_test$Color) %!in% unique(tmp_test_ns$Color))
if (length(not_in_leg) > 0) {
tmp_tmp_test <- tmp_test[which(tmp_test$Color %in% not_in_leg), ]
fig <- fig %>%
add_trace(data = tmp_tmp_test, x = ~x, y = ~y, opacity = 0.9, text = ~Text_ID,
key = ~Text_ID, color = ~Color, symbol = ~Symbol, type = "scatter",
mode = "markers", fill = ~"", hovertemplate = paste("<b>%{text}</b>"),
marker = list(line = list(color = "black", width = tmp_tmp_test$Width_border[1])),
name = tmp_tmp_test$Color, showlegend = TRUE, legendgroup = tmp_tmp_test$Color)
}
tmp_tmp_test <- tmp_test[which(tmp_test$Color %!in% not_in_leg), ]
if (nrow(tmp_tmp_test) > 0) {
fig <- fig %>%
add_trace(data = tmp_tmp_test, x = ~x, y = ~y, opacity = 0.9, text = ~Text_ID,
key = ~Text_ID, color = ~Color, symbol = ~Symbol, type = "scatter",
mode = "markers", fill = ~"", hovertemplate = paste("<b>%{text}</b>"),
marker = list(line = list(color = "black", width = tmp_tmp_test$Width_border[1])),
name = tmp_tmp_test$Color, showlegend = FALSE, legendgroup = tmp_tmp_test$Color)
}
}
tmp_test <- test[which(test$Selected == "User selected"), ]
if (nrow(tmp_test) > 0) {
not_in_leg <- which(unique(tmp_test$Color) %!in% unique(tmp_test_ns$Color))
if (length(not_in_leg) > 0) {
tmp_tmp_test <- tmp_test[which(tmp_test$Color %in% not_in_leg), ]
fig <- fig %>%
add_trace(data = tmp_tmp_test, x = ~x, y = ~y, opacity = 0.9, text = ~Text_ID,
key = ~Text_ID, color = ~Color, symbol = ~Symbol, type = "scatter",
mode = "markers", fill = ~"", hovertemplate = paste("<b>%{text}</b>"),
marker = list(line = list(color = "black", width = tmp_tmp_test$Width_border[1])),
name = tmp_tmp_test$Color, showlegend = TRUE, legendgroup = tmp_tmp_test$Color)
}
tmp_tmp_test <- tmp_test[which(tmp_test$Color %!in% not_in_leg), ]
if (nrow(tmp_tmp_test) > 0) {
fig <- fig %>%
add_trace(data = tmp_tmp_test, x = ~x, y = ~y, opacity = 0.9, text = ~Text_ID,
key = ~Text_ID, color = ~Color, symbol = ~Symbol, type = "scatter",
mode = "markers", fill = ~"", hovertemplate = paste("<b>%{text}</b>"),
marker = list(line = list(color = "black", width = tmp_tmp_test$Width_border[1])),
name = tmp_tmp_test$Color, showlegend = FALSE, legendgroup = tmp_tmp_test$Color)
}
}
fig <- fig %>%
layout(title = "Selection plot", plot_bgcolor = "#e5ecf6", legend = list(orientation = "v",
y = 0), showlegend = T, xaxis = list(title = if (input$Selection_plot_type ==
"PCA") {
paste("Dim ", dim1, " (", 100 * Selection_values$Variance_explained[dim1],
"%)", sep = "")
} else if (input$Selection_plot_type == "UMAP") {
"Dim 1"
}), yaxis = list(title = if (input$Selection_plot_type == "PCA") {
paste("Dim ", dim2, " (", 100 * Selection_values$Variance_explained[dim2],
"%)", sep = "")
} else if (input$Selection_plot_type == "UMAP") {
"Dim 2"
}, dragmode = "lasso")) %>%
config(displaylogo = FALSE, modeBarButtonsToRemove = c("zoomIn2d", "zoomOut2d",
"autoScale2d", "pan2d", "hoverCompareCartesian"))
if (shiny::isRunning()) {
ID_selected_values$subclones <- event_data("plotly_selected")
}
fig %>%
toWebGL()
}User comments:
if (!is.null(Selection_values$rows) && length(Selection_values$rows) > 0 && !is.null(Selection_values$columns) &&
length(Selection_values$columns) > 0) {
fig_violin <- AbSolution:::draw_feature_violinplot(values = Big_mem_values$Big_DF[,
which(Big_mem_values$Header == input$plot_feature)], name_values = input$plot_feature,
sequence_info_df = Big_mem_values$Short_DF, group_info = input$groups_selected,
additional_group_info = input$plot_color_feature, show_reconstructed = input$show_reconstructed,
selected_rows = Selection_values$rows, selected_subclones = NULL, hide_dots = input$hide_points)
ID_selected_values$subclones <- NULL
print(ID_selected_values$clones$key)
fig_violin
}## [1] "Feature violin"
## [1] "Repertoire"
## [1] "CD19+"
## NULL
van Kampen AHC, Mahamune U, Jongejan A, van Schaik BDC, Balashova D, Lashgari D, Pras-Raves M, Wever EJM, Dane AD, García-Valiente R, Moerland PD. ENCORE: a practical implementation to improve reproducibility and transparency of computational research. Nat Commun. 2024 Sep 16;15(1):8117. doi: 10.1038/s41467-024-52446-8. PMID: 39284801; PMCID: PMC11405857.
osVersion## [1] "Ubuntu 18.04.6 LTS"
Sys.info()[which(names(Sys.info()) %in% c("sysname", "release", "version", "machine"))]## sysname
## "Linux"
## release
## "4.15.0-213-generic"
## version
## "#224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023"
## machine
## "x86_64"
print(benchmarkme::get_ram(), unit_system = "iec")## 15.5 GiB
benchmarkme::get_cpu()## $vendor_id
## [1] "GenuineIntel"
##
## $model_name
## [1] "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz"
##
## $no_of_cores
## [1] 12
sessionInfo()## R version 4.3.1 (2023-06-16)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.6 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
##
## locale:
## [1] LC_CTYPE=es_ES.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=es_ES.UTF-8 LC_COLLATE=es_ES.UTF-8
## [5] LC_MONETARY=es_ES.UTF-8 LC_MESSAGES=es_ES.UTF-8
## [7] LC_PAPER=es_ES.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=es_ES.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Europe/Madrid
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] plotly_4.10.1 ggplot2_3.5.1 dplyr_1.1.2
## [4] shiny_1.7.4 AbSolution_0.0.5.9550
##
## loaded via a namespace (and not attached):
## [1] shinythemes_1.2.0 later_1.3.1
## [3] bitops_1.0-7 tibble_3.2.1
## [5] Peptides_2.4.5 R.oo_1.25.0
## [7] shinymanager_1.0.410 lifecycle_1.0.3
## [9] shinyjqui_0.4.1 doParallel_1.0.17
## [11] rprojroot_2.0.3 lattice_0.20-45
## [13] MASS_7.3-58.2 crosstalk_1.2.0
## [15] magrittr_2.0.3 sass_0.4.6
## [17] rmarkdown_2.21 jquerylib_0.1.4
## [19] yaml_2.3.7 bigparallelr_0.3.2
## [21] httpuv_1.6.11 askpass_1.1
## [23] reticulate_1.34.0 RColorBrewer_1.1-3
## [25] cowplot_1.1.1 DBI_1.2.3
## [27] ade4_1.7-22 golem_0.4.1
## [29] zlibbioc_1.46.0 R.cache_0.16.0
## [31] GenomicRanges_1.52.0 purrr_1.0.1
## [33] R.utils_2.12.2 BiocGenerics_0.46.0
## [35] RCurl_1.98-1.12 styler_1.10.0
## [37] bigassertr_0.1.6 reactable_0.4.4
## [39] GenomeInfoDbData_1.2.10 IRanges_2.34.0
## [41] S4Vectors_0.38.1 umap_0.2.10.0
## [43] RSpectra_0.16-1 parallelly_1.35.0
## [45] codetools_0.2-19 DelayedArray_0.26.7
## [47] DT_0.28 bs4Dash_2.3.4
## [49] tidyselect_1.2.0 bigstatsr_1.5.12
## [51] viridis_0.6.3 shinyWidgets_0.7.6
## [53] matrixStats_1.2.0 stats4_4.3.1
## [55] flock_0.7 GenomicAlignments_1.36.0
## [57] jsonlite_1.8.4 ellipsis_0.3.2
## [59] dashboardthemes_1.1.6 iterators_1.0.14
## [61] foreach_1.5.2 tools_4.3.1
## [63] progress_1.2.2 stringdist_0.9.10
## [65] Rcpp_1.0.10 glue_1.6.2
## [67] gridExtra_2.3 xfun_0.46
## [69] MatrixGenerics_1.12.3 GenomeInfoDb_1.36.0
## [71] withr_2.5.0 formatR_1.14
## [73] fastmap_1.1.1 sourcetools_0.1.7-1
## [75] fansi_1.0.4 shinyjs_2.1.0
## [77] openssl_2.0.6 digest_0.6.31
## [79] R6_2.5.1 mime_0.12
## [81] colorspace_2.1-0 RSQLite_2.3.1
## [83] diptest_0.76-0 R.methodsS3_1.8.2
## [85] config_0.3.2 utf8_1.2.3
## [87] tidyr_1.3.0 generics_0.1.3
## [89] data.table_1.16.2 iterors_1.0
## [91] prettyunits_1.1.1 httr_1.4.6
## [93] htmlwidgets_1.6.2 S4Arrays_1.0.4
## [95] pkgconfig_2.0.3 gtable_0.3.3
## [97] blob_1.2.4 shinymeta_0.2.0.3
## [99] XVector_0.40.0 htmltools_0.5.5
## [101] scales_1.3.0 fresh_0.2.0
## [103] Biobase_2.60.0 sunburstR_2.1.8
## [105] png_0.1-8 attempt_0.3.1
## [107] knitr_1.42 rstudioapi_0.14
## [109] tzdb_0.4.0 nlme_3.1-162
## [111] cachem_1.0.8 stringr_1.5.0
## [113] KernSmooth_2.23-20 parallel_4.3.1
## [115] shinycssloaders_1.0.0 pillar_1.9.0
## [117] grid_4.3.1 vctrs_0.6.2
## [119] shazam_1.2.0 promises_1.2.0.1
## [121] shinyFiles_0.9.3 airr_1.4.1
## [123] xtable_1.8-4 billboarder_0.4.0
## [125] evaluate_0.21 readr_2.1.4
## [127] cli_3.6.1 compiler_4.3.1
## [129] Rsamtools_2.16.0 rlang_1.1.1
## [131] crayon_1.5.2 sortable_0.5.0
## [133] fs_1.6.2 stringi_1.7.12
## [135] viridisLite_0.4.2 BiocParallel_1.34.1
## [137] assertthat_0.2.1 munsell_0.5.0
## [139] Biostrings_2.68.1 lazyeval_0.2.2
## [141] upsetjs_1.11.1 Matrix_1.6-5
## [143] benchmarkme_1.0.8 scrypt_0.1.6
## [145] hms_1.1.3 alakazam_1.3.0
## [147] bit64_4.0.5 learnr_0.11.5
## [149] seqinr_4.2-30 SummarizedExperiment_1.30.1
## [151] igraph_1.6.0 memoise_2.0.1
## [153] bslib_0.4.2 benchmarkmeData_1.0.4
## [155] bit_4.0.5 ape_5.7-1